#include "head.h"
bool my_cd(sendMsg msg, client_status *user, int net_fd) {
    //printf("%s\n",msg.msg);
    
    printf("用户发过来的cd地址信息：%s\n",msg.msg);
    if (msg.msg[0] == '.' && msg.msg[1] == '.') {
        // 执行 .. 逻辑
        char buf[5000] = {0};
        if (user->path[0] == 0) {
            // 返回错误
            recvMsg err_msg;
            strcpy(err_msg.statu, "error");
            send(net_fd, &err_msg, sizeof(err_msg), 0);
            return false;
        } else {
            // 按照用户名 / .. 的形式拼接成一个字符串使用 opendir 查询
            snprintf(buf,sizeof(buf), "%s/%s..", user->user_name, user->path);
            printf("用户名：%s\n",buf);
            printf("用户当前目录：%s\n",user->path);
            DIR *path = opendir(buf);
            if (path == NULL) {
                // 返回错误
                recvMsg err_msg;
                strcpy(err_msg.statu, "error");
                send(net_fd, &err_msg, sizeof(err_msg), 0);
                return false;
            } else {
                // 查找成功且当前路径不是用户所在家目录
                // 将当前路径切割
                char *last_slash = strrchr(user->path, '/');
                if (last_slash != NULL && last_slash != user->path) {
                    // 如果路径中有斜杠且不只是第一个字符（如 "a/"）
                    *last_slash = '\0';  // 暂时截断字符串
                    char *prev_slash = strrchr(user->path, '/');
                    if (prev_slash != NULL) {
                        *(prev_slash + 1) = '\0';  // 保留直到上一个斜杠，包括它
                    } else {
                        user->path[0] = '\0';  // 如果没有上一个斜杠，将路径设置为空
                    }
                } else if (last_slash == user->path) {
                    // 如果路径只有一个
                    user->path[1] = '\0';
                } else {
                    // 如果路径中没有斜杠，设置为空
                    user->path[0] = '\0';

                }
                closedir(path);
            }
        }
        // 发送正确状态码
        recvMsg success_msg;
        strcpy(success_msg.statu, "true");
        strcpy(success_msg.msg,user->path);

        send(net_fd, &success_msg, sizeof(success_msg), 0);
    } else {
        char buf[5000] = {0};
        // 正常处理逻辑处理成一个相对路径基于工作路径
        snprintf(buf, sizeof(buf), "%s/%s%s", user->user_name, user->path, msg.msg);
        printf("用户名：%s\n",user->user_name);
        printf("相对路径:%s\n",buf);
        DIR *path = opendir(buf);
        if (path == NULL) {
            // 发送错误状态码
            recvMsg err_msg;
            strcpy(err_msg.statu, "error");
            send(net_fd, &err_msg, sizeof(err_msg), 0);
            return false;
        } else {
            // 修改 cur_path 为 当前路径 + cleaned_msg
            //if (user.path[strlen(user.path) - 1] != '/') {
            //  strcat(user->path, "/");
            //}

            strcat(user->path, msg.msg);
            printf("用户当前路径：%s\n",user->path);
            closedir(path);
            // 发送正确状态码
            // 发送正确状态码并且将path更新到msg里面
            recvMsg success_msg;
            strcpy(success_msg.msg,user->path);
            strcpy(success_msg.statu, "true");
            send(net_fd, &success_msg, sizeof(success_msg), 0);

            printf("发送的当前路径%s\n", success_msg.msg);
        }

    }
    return true;
}
